package com.heima.tlias.dao;

import com.github.pagehelper.Page;
import com.heima.tlias.controller.request.QueryEmpRequest;
import com.heima.tlias.pojo.Emp;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

@Mapper
public interface EmpMapper {

    /**
     * 分页条件查询员工列表
     *
     * @param start   分页起始索引
     * @param size    每页展示数据条数
     * @param request 客户端传入的筛选参数
     * @return
     */
    public List<Emp> queryEmpByCondition(@Param("start") Integer start, @Param("size") Integer size, @Param("request") QueryEmpRequest request);

    /**
     * 查询满足条件的数据总条数
     *
     * @param request
     * @return
     */
    public Long queryEmpCountByCondition(@Param("request") QueryEmpRequest request);

    /**
     * 根据条件查询员工列表
     *
     * @param request
     * @return
     */
    public Page<Emp> queryEmpList(@Param("request") QueryEmpRequest request);

    /**
     * 新增员工信息
     *
     * @param emp
     */
    @Insert("insert into emp values(null,#{username},#{password},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},#{createTime},#{updateTime})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    public void insert(Emp emp);

    /**
     * 根据员工id批量删除员工
     *
     * @param ids
     */
    void deleteByIds(@Param("ids") Integer... ids);

    /**
     * 根据id查询详情(包含工作经历)
     *
     * @param id
     * @return
     */
    Emp selectById(Integer id);

    /**
     * 根据员工id修改员工基本信息
     *
     * @param emp
     */
    void updateById(Emp emp);

    /**
     * 查询员工职位数量统计信息
     *
     * @return
     */
    List<Map<String, Object>> queryEmpJobData();

    /**
     * 查询员工性别统计信息
     *
     * @return
     */
    List<Map<String, Object>> queryEmpGenderData();

    /**
     * 根据用户名或密码查询用户信息
     *
     * @param username
     * @param password
     * @return
     */
    Emp queryByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    /**
     * 查询所有员工
     * @return
     */
    @Select("select id,name from emp")
    List<Emp> queryAll();
}
